package com.bilin.coin.network.download;

import android.util.Log;

import java.io.IOException;

import okhttp3.MediaType;
import okhttp3.ResponseBody;
import okio.Buffer;
import okio.BufferedSource;
import okio.ForwardingSource;
import okio.Okio;
import okio.Source;

/**
 * Created by pundix002 on 2018/5/9.
 */

public class DownLoadResponseBody extends ResponseBody {

    private ResponseBody responseBody;
    private DownLoadListener downLoadListener;

    // BufferedSource 是okio库中的输入流，这里就当作inputStream来使用。
    private BufferedSource bufferedSource;

    public DownLoadResponseBody(ResponseBody responseBody, DownLoadListener downLoadListener) {
        this.responseBody = responseBody;
        this.downLoadListener = downLoadListener;
    }

    @Override
    public MediaType contentType() {
        return responseBody.contentType();
    }

    @Override
    public long contentLength()  {
        return responseBody.contentLength();
    }



    @Override
    public BufferedSource source() {
        if (bufferedSource == null) {
            Source source = source(responseBody.source());
            bufferedSource = Okio.buffer(source);
            //bufferedSource = Okio.buffer(source(responseBody.source()));
        }
        return bufferedSource;
    }

    private Source source(Source source) {
        return new ForwardingSource(source) {
            long totalBytesRead = 0L;

            @Override
            public long read(Buffer sink, long byteCount) throws IOException {
                long bytesRead = super.read(sink, byteCount);
                // read() returns the number of bytes read, or -1 if this source is exhausted.
                totalBytesRead += bytesRead != -1 ? bytesRead : 0;
                Log.e("download", "read: "+ (int) (totalBytesRead * 100 / responseBody.contentLength()));
                if (null != downLoadListener) {
                    if (bytesRead != -1) {
                        final int percent = (int) (100 * bytesRead / responseBody.contentLength());
                        downLoadListener.onProgress(percent);
                    }

                }
                return bytesRead;
            }
        };

    }

   /* private Source source(Source source){
        return new ForwardingSource(source) {
            long totalBytesRead = 0L;
            @Override
            public long read(Buffer sink, long byteCount) throws IOException {
                long bytesRead = super.read(sink,byteCount);
                totalBytesRead += bytesRead != -1 ? bytesRead : 0;   //不断统计当前下载好的数据
                //接口回调
                downLoadListener.onProgress(totalBytesRead,responseBody.contentLength(),bytesRead == -1);
                return bytesRead;
            }
        };
    }*/

}
